/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt.editor.basis;

import org.eclipse.swt.custom.CaretEvent;
import org.eclipse.swt.custom.CaretListener;

import de.mnit.basis.daten.struktur.container.Engpass;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.SWT_TextEditor;
import de.mnit.basis.swt.statisch.FarbManager;

/**
 * @author Michael Nitsche
 * 16.11.2010	Erstellt
 */
public class Fn_ZeilenHintergrund {

	public void init(final SWT_TextEditor editor, final int[] zeilenHGFarbe) {
		final Engpass<Integer> zeilenHintergrund=Engpass.neu(-1);

		// Event wird vor dem Löschen von Text geworfen!!!
		editor.swt().addCaretListener(new CaretListener() {
			public void caretMoved(CaretEvent event) {
				if(event.caretOffset==0)  //#0000338: BUGFIX: Beim Ausschneiden oder Löschen blieb eine Zeile stehen!
					return;

				int zeile=editor.swt().getLineAtOffset(event.caretOffset);
				if(zeilenHintergrund.g()==zeile) //BUGFIX: Sonst Fehler beim Markieren und Ersetzen des letzten Wortes!!!
					return;

				if(zeilenHintergrund.g()>=0 && zeilenHintergrund.g()<editor.swt().getLineCount())
					try {
						editor.swt().setLineBackground(zeilenHintergrund.g(), 1, null);
					}
					catch(ArrayIndexOutOfBoundsException e) {
						Fehler.zeig(e, false, "Puffer: "+zeilenHintergrund.g()+"\nAnzahl: "+editor.swt().getLineCount());
					}

//				Ausgabe.debug("Setze Zeile"+zeile);
				editor.swt().setLineBackground(zeile, 1, FarbManager.gFarbe(zeilenHGFarbe));
				zeilenHintergrund.s(zeile);
			}
		});
	}
}
